import time
import unittest

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.firefox.service import Service
from selenium.webdriver.support.wait import WebDriverWait
import selenium.webdriver.support.expected_conditions as expected_conditions


class MyTestCaseFireFox(unittest.TestCase):
    driver = None

    @classmethod
    def setUpClass(cls) -> None:
        # 注册 驱动打开的位置
        service = Service(executable_path="../../dirver_exe/geckodriver.exe")
        # 打开浏览器  driver 代表 浏览器对象
        cls.driver = webdriver.Firefox(service=service)

        # 隐式等待 是全局的  直接写在我们的 初始化 方法中
        """
            1、想要使用 隐式等待  ：
             1. 先创建一个 隐式等待的  对象
        """
        cls.driver.implicitly_wait(time_to_wait=30)
        cls.driver.set_script_timeout(time_to_wait=30)
        cls.driver.set_page_load_timeout(time_to_wait=30)
        # 设置全局元素的 隐式等待时间

    def test_wait_time(self):
        """智能等待中的 显示等待"""
        """
            显示等待是是 为 某一个 特定的元素 去 添加的 
        """

        self.driver.get("http://192.168.0.152:8080/testhtml/exam/index.html")

        self.driver.find_element(By.TAG_NAME, "a").click()
        # 将网页中的  a标签的 跳转方式设置为在新标签页中打开
        """
            如果 想要操作的 元素 在新的标签页中打开，我们也需要 切换句柄 到新标签页中 才能 操作新标签页中的 元素
        """
        # 在进行 切换标签页时 ，首先要 获得网页中的 一共有几个标签页
        window_handles = self.driver.window_handles
        print(window_handles)
        self.driver.switch_to.window(window_handles[1])
        # time.sleep(5)  # 固定时间（强制等待） 浪费时间 效率很低
        # self.driver.find_element(By.NAME, "c4").click()

        # """
        #     想要使用 显示等待 ：
        #     1、 需要导入 显示等待的 模块
        # """
        c4 = WebDriverWait(driver=self.driver,  # 调用的浏览器的 驱动
                           timeout=10,  # 查找元素的最大的超时时间
                           poll_frequency=1,  # 步长，每隔多久 去 搜索一次
                           ignored_exceptions=None  # 是否忽略一些异常
                           ).until(
            expected_conditions.presence_of_element_located((By.NAME, "1212"))
        )

        c4.click()

    def test_wait_time_02(self):
        """智能等待中的 隐式等待"""
        """
            隐式等待是  全局的 ，全局元素 都共同 使用一个  超时时间 
        """

        self.driver.get("http://192.168.0.152:8080/testhtml/exam/index.html")

        self.driver.find_element(By.TAG_NAME, "a").click()
        # 将网页中的  a标签的 跳转方式设置为在新标签页中打开
        """
            如果 想要操作的 元素 在新的标签页中打开，我们也需要 切换句柄 到新标签页中 才能 操作新标签页中的 元素
        """
        # 在进行 切换标签页时 ，首先要 获得网页中的 一共有几个标签页
        window_handles = self.driver.window_handles
        print(window_handles)
        self.driver.switch_to.window(window_handles[1])
        # time.sleep(5)  # 固定时间（强制等待） 浪费时间 效率很低
        self.driver.find_element(By.NAME, "c4").click()


if __name__ == '__main__':
    unittest.main()
